#ifndef _NP_PROBLEMS_FUNCTION_HOLDER_HEADER_
#define _NP_PROBLEMS_FUNCTION_HOLDER_HEADER_

#include <vector>

namespace Library
{
    class FunctionHolder
    {
    public:
        FunctionHolder(const std::vector<std::pair<double, double> >& points, const int numberOfUnfixedPoints);
        void Calculate();
        double GetResult() const;
        const std::vector<std::pair<double, double> >& GetPoints() const;
        const std::vector<std::pair<int, int> >& GetEdges() const;
        const std::vector<std::pair<double, double> > GetMutablePoints() const;
        void SetMutablePoints(const std::vector<std::pair<double, double> >& points);
		void SetEdges(std::vector<std::pair<int, int> >& edges);
		void ResetMutablePoints();
        

    protected:
        void PushRandomPoints();

    protected:
        std::vector<std::pair<double, double> > points_;
        std::vector<std::vector<double> > matrix_;
        std::vector<std::pair<int, int> > edges_;
        const int numberOfUnfixedPoints_;
    };
}

#endif //_NP_PROBLEMS_FUNCTION_HOLDER_HEADER_